import java.util.PriorityQueue;

public class LastStoneWeight {
    public int lastStoneWeight(int[] stones) {
        PriorityQueue<Integer> heap = new PriorityQueue<>((o1, o2) -> o2 - o1);

        for(int x : stones) {
            heap.offer(x);
        }

        // 每次取两个堆顶元素, 相 "粉碎", 如果还有重量则再放回堆中
        // 如果没有就不放, 最后如果堆中没有值则返回0, 存在一个值则返回该值
        while(heap.size() > 1) {
            int heavier = heap.poll();
            int heavy = heap.poll();
            if(heavier - heavy != 0) {
                heap.offer(heavier - heavy);
            }
        }

        // 堆中剩一个元素则返回该元素, 没有元素剩下则返回 0
        return heap.isEmpty() ? 0 : heap.poll();
    }
}
